// 给定一个数组nums，要求将所有0移动到末尾，并保持所有的非0数字的相对顺序

// 思路，双指针，slow指针左边都是非0数字，fast则指向当前元素，当fast指向的元素非0时，与slow交换元素
// 时间复杂度为On
// 空间复杂度为O1

function moveZeroes(arr) {
    let slow = 0
    let fast = 0
    while (fast < arr.length) {
        if (arr[fast] !== 0) {
            [arr[slow], arr[fast]] = [arr[fast], arr[slow]];
            slow++
        }
        fast++
    }
    return arr
}

let nums = [0, 1, 0, 3, 12]
moveZeroes(nums)
console.log(nums);